package views.swing;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import javax.swing.border.EmptyBorder;
import models.services.*;
import models.entities.*;

import java.util.ArrayList;

public class Busqueda extends JPanel implements ActionListener, ItemListener{
	private JTextField campoNombre=new JTextField(25);
	private JButton botonBuscar=new JButton("Buscar");	
	private JList listaResultados=new JList();
	
	private JComboBox comboTipo=new JComboBox(new String[]{"Cliente", "Producto", "Proveedor", "Empleado"});
	
	private JButton botonLlamar;
	private JDesktopPane parent;

	public Busqueda(JDesktopPane parent){ 		
		this.parent=parent;
		
		comboTipo.addItemListener(this);
		
		botonBuscar.setActionCommand("Buscar");
		botonBuscar.addActionListener(this);
		
		this.setLayout(new BorderLayout(5, 5));
		
		JPanel panelNorte=new JPanel();
		panelNorte.setLayout(new BorderLayout(5, 5));
		panelNorte.add(campoNombre, BorderLayout.CENTER);
		panelNorte.add(botonBuscar, BorderLayout.EAST);
		panelNorte.add(comboTipo, BorderLayout.WEST);
		panelNorte.setBorder(new EmptyBorder(10, 15, 5, 15));
		
		JToolBar herramientas=new JToolBar();
		herramientas.add(crearOpcion("Modificar", "src/views/swing/resources/apuntes.png"));
		
		botonLlamar=crearOpcion("Llamar", "src/views/swing/resources/telefono.png");
		
		herramientas.add(botonLlamar);
		
		this.add(panelNorte, BorderLayout.NORTH);
		this.add(herramientas, BorderLayout.SOUTH);
		this.add(new JScrollPane(listaResultados));
	}
	
	public JButton crearOpcion(String etiqueta, String icono){
		JButton boton=new JButton(new ImageIcon(icono));
		boton.setToolTipText(etiqueta);
		boton.setActionCommand(etiqueta);
		boton.addActionListener(this);
		return boton;
	}
	
	public void actionPerformed(ActionEvent evt){
		String comando=evt.getActionCommand();
		if(comando.equals("Buscar")){
			buscar();
		}else if(comando.equals("Modificar")){
			if(parent==null){
				JFrame ventanita=new JFrame("Modificar datos");
				switch(comboTipo.getSelectedIndex()){
					case 0:
						ventanita.setContentPane(new ABCClientes((Cliente)listaResultados.getSelectedValue()));
						break;
					case 3:
						ventanita.setContentPane(new ABCEmpleados((Empleados)listaResultados.getSelectedValue()));
						break;
				}
				ventanita.pack();
				ventanita.setVisible(true);
			}else{
				JInternalFrame ventanita=new JInternalFrame("Modificar datos", true, true, true, true);
				switch(comboTipo.getSelectedIndex()){
					case 0:
						ventanita.setContentPane(new ABCClientes((Cliente)listaResultados.getSelectedValue()));
						break;
					case 3:
						ventanita.setContentPane(new ABCEmpleados((Empleados)listaResultados.getSelectedValue()));
						break;
				}
				parent.add(ventanita);
				ventanita.pack();
				ventanita.setVisible(true);
			}
		}else if(comando.equals("Llamar")){
			llamarClientesSeleccionados();
		}else{
			JOptionPane.showMessageDialog(null, "Comando no implementado: "+comando);
		}	
	}
	
	public void itemStateChanged(ItemEvent e){
		//buscar();
		botonLlamar.setEnabled(comboTipo.getSelectedIndex()==0);
	}
	
	public void llamarClientesSeleccionados(){
		Object[] seleccionados=listaResultados.getSelectedValues();
		ArrayList<Cliente> lista=new ArrayList<Cliente>();
		for(int k=0; k<seleccionados.length; k++){
			lista.add((Cliente)seleccionados[k]);
		}
		if(parent==null){
			JFrame ventana=new JFrame("Asistente telefonico");
			ventana.setContentPane(new AsistenteTelefonico(lista));
			ventana.pack();
			ventana.setVisible(true);
		}else{
			JInternalFrame ventana=new JInternalFrame("Asistente telefonico", true, true, true, true);
			ventana.setContentPane(new AsistenteTelefonico(lista));
			ventana.pack();
			ventana.setVisible(true);
			parent.add(ventana);
		}
	}
	
	public void buscar(){
		Object[] arreglo=null;
		switch(comboTipo.getSelectedIndex()){
			case 0:
				arreglo=new ServicioClientes().buscarPorString("nombre", campoNombre.getText()).toArray();
				break;
			case 1:
				arreglo=new ServicioProductos().buscarPorString("nombre", campoNombre.getText()).toArray();
				break;
			case 2:
				arreglo=new ServicioProveedores().buscarPorString("nombrecomp", campoNombre.getText()).toArray();
				break;
			case 3:
				arreglo=new ServicioEmpledos().buscarPorString("nombre", campoNombre.getText()).toArray();
		}
		listaResultados.setListData(arreglo);
	}
	
	public static void main(String[] args){
		JFrame ventana=new JFrame("Sistemas y enlaces :: Buscar");
		ventana.setContentPane(new Busqueda(null));
		ventana.pack();
		ventana.setVisible(true);
	}
}